package com.atguigu.chaptar9

import java.io.File
import scala.io.{BufferedSource, Source}

object $01_ImplicitDefined {
  def main(args: Array[String]): Unit = {
      /*
      隐式转换函数定义:悄悄的将一个类型转为另一个类型
          语法:implicit def 函数名(参数:待转换类型): 目标类型 ={..}
              注意:隐式转换方法在定义的时候不能省略返回值类型
           隐式转换方法的调用时机:
                1.当前类型与目标类型不一致的时候会自动调用
                2.对象使用了不属于自身的属性和方法的时候会自动调用
           隐式转换寻找机制:
                1.首先从当前作用域寻找是否由符合要求的隐式转换,如果找到直接自动调用,找不到则报错
                2.如果隐式转换定义在其他object中,此时要想使用隐式转换,需要导入:import object名称._/import object名称.隐式方法名称
                3.如果隐式转换定义在其他class中,此时需要先创建一个class对象,然后通过:import 对象._/import 对象名称.隐式方法名称
                4.如果有多个隐式转换都符合要求,此时需要明确指定使用哪个隐式转换
       */
    //当前类型与目标类型不一致,悄悄自动去找隐式转换方法
    val d:Int = 2.0
    //对象使用了不属于自身的属性和方法,悄悄自动去找
    val file = new File("datas/data.txt")
    file.getLines
  }
  implicit def double2Int(d:Double): Int={d.toInt}
  implicit def file2SourceBuffle(a:File):BufferedSource = Source.fromFile(a,"utf-8")
}
